﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TISModel;
using BTO;

namespace DAL
{
    public class DALContacto
    {
        public List<BTO.Contacto> list() {
            //Pesquisa dados
            var contactosEntities = new TISModel.TISEntities();

            //cria modelos e add na lista para retornar
            var contactos = (from c in contactosEntities.Contacto
                            select new BTO.Contacto
                            {
                                IDContacto = c.IDContacto,
                                IDCliente = c.IDCliente,
                                IDAgencia = c.IDAgencia,
                                nome = c.nome,
                                descricao = c.descricao,
                                telefone = c.telefone
                            }).ToList();

            return contactos;
        }

        public BTO.Contacto getByID(int id)
        {
            //Pesquisa dados e cria modelo para retornar
            var contactosEntities = new TISModel.TISEntities();
            var contacto = (from c in contactosEntities.Contacto
                           where c.IDContacto == id
                           select new BTO.Contacto
                           {
                               IDContacto = c.IDContacto,
                               IDCliente = c.IDCliente,
                               IDAgencia = c.IDAgencia,
                               nome = c.nome,
                               descricao = c.descricao,
                               telefone = c.telefone

                           }).FirstOrDefault();

            return contacto;

        }

        public List<BTO.Contacto> getByCliente(int? idCliente)
        {
            //Pesquisa dados e cria modelo para retornar
            var contactosEntities = new TISModel.TISEntities();
            var contactos = (from c in contactosEntities.Contacto
                           where c.IDCliente == idCliente
                           select new BTO.Contacto
                           {
                               IDContacto = c.IDContacto,
                               IDCliente = c.IDCliente,
                               IDAgencia = c.IDAgencia,
                               nome = c.nome,
                               descricao = c.descricao,
                               telefone = c.telefone

                           }).ToList();

            return contactos;
        }

        public List<BTO.Contacto> getByAgencia(int idAgencia)
        {
            //Pesquisa dados e cria modelo para retornar
            var contactosEntities = new TISModel.TISEntities();
            var contactos = (from c in contactosEntities.Contacto
                            where c.IDAgencia == idAgencia
                            select new BTO.Contacto
                            {
                                IDContacto = c.IDContacto,
                                IDCliente = c.IDCliente,
                                IDAgencia = c.IDAgencia,
                                nome = c.nome,
                                descricao = c.descricao,
                                telefone = c.telefone

                            }).ToList();

            return contactos;
        }

        public void insert(BTO.Contacto toInsert)
        {
            try
            {
                //cria um entity model e guarda
                var contactoEntities = new TISModel.TISEntities();

                TISModel.Contacto contacto = new TISModel.Contacto();
                contacto.IDCliente = toInsert.IDCliente;
                contacto.IDAgencia = toInsert.IDAgencia;
                contacto.nome = toInsert.nome;
                contacto.descricao = toInsert.descricao;
                contacto.telefone = toInsert.telefone;
                
                contactoEntities.AddToContacto(contacto);
                contactoEntities.SaveChanges();

            }
            catch (Exception)
            {
                throw new System.Exception("Não foi possível inserir o contacto!");
            }
        }

        public void delete(int id)
        {
            var contactoEntities = new TISModel.TISEntities();
            var contacto = (from c in contactoEntities.Contacto where c.IDContacto == id select c).FirstOrDefault();

            if (contacto != null)
            {
                try
                {
                    contactoEntities.DeleteObject(contacto);
                    contactoEntities.SaveChanges();
                }
                catch (Exception)
                {
                    throw new System.Exception("Não foi Possível remover o contacto!");
                }
            }
            else
            {
                throw new System.Exception("Contacto não encontrado!");
            }

        }
    }
}
